package TarryDAOS;

import Herramientas.PasarelaDatos;
import Herramientas.ResultSets;
import TarryDTOS.TarryPedidosDTO;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Mauricio Alan
 */
public class TarryPedidosDAO {

    private PasarelaDatos db;
    private ResultSets res;

    public TarryPedidosDAO() {
        db = new PasarelaDatos();
        res = new ResultSets();
    }

    /**
     * ALAN GONZALEZ METODO PARA OBTENER TODOS LOS PEDIDOS GENERADOS POR UN
     * VENDEDOR LA VARIABLE
     *
     * @param vendedor
     * @return
     */
    public Vector pedidosPorVendedor(int idVendedor) {
        Vector pedidos = new Vector();
        String query = "SELECT * FROM pedidos WHERE pedidos.id_vendedor = " + idVendedor + " ORDER BY pedidos.fecha_creacion,pedidos.hora_creacion DESC ";
        db.openDatabase();
        ResultSet rst = db.executeQuery(query);
        try {
            while (rst.next()) {
                TarryPedidosDTO p = new TarryPedidosDTO();
                p = res.tarryPedidosDTO(rst);
                pedidos.add(p);
            }
        } catch (SQLException ex) {
            Logger.getLogger(TarryPedidosDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        db.closeDatabase();
        return pedidos;
    }

    /**
     * ALAN GONZALEZ FILTRADO POR IDE DE USUARIO Y POR ID DE CLIENTE
     *
     * @param idVendedor
     * @param idCliente
     * @return
     */
    public Vector pedidosPorVendedorPorIdCliente(int idVendedor, int idCliente) {
        Vector pedidos = new Vector();
        String query = "SELECT * FROM pedidos WHERE pedidos.id_vendedor = "
                + idVendedor + " AND pedidos.id_cliente =" + idCliente + ";";
        db.openDatabase();
        ResultSet rst = db.executeQuery(query);
        try {
            while (rst.next()) {
                TarryPedidosDTO p = new TarryPedidosDTO();
                p = res.tarryPedidosDTO(rst);
                pedidos.add(p);
            }
        } catch (SQLException ex) {
            Logger.getLogger(TarryPedidosDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        db.closeDatabase();
        return pedidos;
    }

    /**
     * ALAN GONZALEZ SELECCIONA LOS PEDIDOS POR USUARIO Y POR PEDIDO
     *
     * @param idVendedor
     * @param idPedido
     * @return
     */
    public Vector pedidosPorVendedorPorIdPedido(int idVendedor, int idPedido) {
        Vector pedidos = new Vector();
        String query = "SELECT * FROM pedidos WHERE pedidos.id_vendedor = "
                + idVendedor + " AND pedidos.id_pedido =" + idPedido;
        db.openDatabase();
        ResultSet rst = db.executeQuery(query);
        try {
            while (rst.next()) {
                TarryPedidosDTO p = new TarryPedidosDTO();
                p = res.tarryPedidosDTO(rst);
                pedidos.add(p);
            }
        } catch (SQLException ex) {
            Logger.getLogger(TarryPedidosDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        db.closeDatabase();
        return pedidos;
    }

    /**
     * ALAN GONZALEZ ACTUALIZA EL TOTAL DE UN PEDIDO CADA QUE SE AGREGA O SE
     * ELIMINA UN ITEM DEL MISMO
     *
     * @param idPedido
     */
    public void actualizarSubtotal(int idPedido, double total) {
        db.openDatabase();
        double iva = (total) * (0.16);
        double totalIva = (total) + (iva);
        String query = "UPDATE pedidos SET";
        query += " pedidos.total = " + total + ",";
        query += " pedidos.total_iva = " + totalIva;
        query += " WHERE";
        query += " pedidos.id_pedido = " + idPedido + ";";
        db.execute(query);
        db.closeDatabase();
    }

    /**
     * ALAN GONZALEZ NUEVO PEDIDO
     *
     * @param idVendedor
     * @param idCliente
     * @param idPedido
     */
    public void nuevoPedido(int idVendedor, int idCliente, int idPedido) {
        db.openDatabase();
        // 1.- se busca el id cliente si es valido
        // 2.- se busca el id del pedido si no esta ya registrado
        String query = "INSERT INTO pedidos SET";
        query += " pedidos.id_vendedor = " + idVendedor + ",";
        query += " pedidos.id_pedido =" + idPedido + ",";
        query += " pedidos.id_cliente =" + idCliente + ",";
        query += " pedidos.estado = 1,";
        query += " pedidos.fecha_creacion = NOW(),";
        query += " pedidos.hora_creacion = CURRENT_TIMESTAMP();";
        db.execute(query);
        db.closeDatabase();
    }

    /**
     * ALAN GONZALEZ - METODO AUXILIAR
     * @param id
     * @return 
     */
    public int idPedidoSegunIdRegistro(int id){
     int idPedido =0;
     db.openDatabase();
     String query ="SELECT pedidos.id_pedido FROM pedidos WHERE pedidos.id="+id+" LIMIT 1;";
     ResultSet rst = db.executeQuery(query);
        try {
            if(rst.next()){
            idPedido = rst.getInt("id_pedido");
            }
            else{
            idPedido = 0;
            }
        } catch (SQLException ex) {
            Logger.getLogger(TarryPedidosDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
     db.closeDatabase();
     return idPedido;
    }
    
    /**
     * ALAN GONZALEZ METODO PARA BORRAR PEDIDOS
     * @param idPedido 
     */
    public void eliminarPedido(int id) {
        // SE ELIMINAN LOS ITEMS DEL PEDIDO BORRADO
        TarryItemsPedidoDAO itemsDAO = new TarryItemsPedidoDAO();
        itemsDAO.eliminarTodosItemsPedido(this.idPedidoSegunIdRegistro(id));
        // SE ELIMINAN LOS ITEMS DEL PEDIDO BORRADO
        db.openDatabase();
        String query = "DELETE  FROM pedidos WHERE pedidos.id="+id;
        db.execute(query);
        db.closeDatabase();
    }

}
